<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document</title>
</head>

<body>
    <div id="box"></div>
    <script type="text/javascript" src="./js/react.development.js"></script>
    <!-- 提供了操作DOM的react扩展库 -->
    <script type="text/javascript" src="./js/react-dom.development.js"></script>
    <!-- 解析jsx语法的代码转换为js语法 -->
    <script type="text/javascript" src="./js/babel.min.js"></script>
    <script src="./js/prop-types.js"></script>
    <script type="text/babel">

        class App extends React.Component {
            constructor(props) {
                super(props);
                this.state={
                    list:['吃饭','睡觉','打豆豆']
                }
                this.add = this.add.bind(this);
            }
            /* 数据在哪，操作数据的方法在哪 */
            add(item){
                // 数组添加元素  this.state.list   .push   react不能这种方式直接操作  this.setState
                const list = this.state.list;
                list.push(item);
                this.setState({
                    list:list
                })
            }
            render() {
                return (
                    <div>
                        <h1>todolist</h1>
                        <div>{this.state.list}</div>
                        {/* 引入子组件 直接使用即可 */}
                        <AddTodo add={this.add}/>
                        <List list={this.state.list}/>
                    </div>
                );
            }
        }
        /* 子组件的写法 */
        class AddTodo extends React.Component {
            constructor(props){
                super(props);
                console.log(props);
            }
            collectionData(){
                // 点击按钮收集数据
                console.log(this.msgInput.value);
                // 检测输入的数据类型 （去除首尾空格） 字符串去除首尾空格 trim
                const todo = this.msgInput.value.trim();

                // 不合法 返回
                if(!todo){
                    console.log('数据不合格');
                    return;
                }
                // 合法 进行添加
                this.props.add(todo);
                // 清空input中的值
                this.msgInput.value = '';
            }
            render() {
                return (
                    <div>
                    {/* 
                        1.输入值
                        2.收集
                        3.点击btn
                        4.将新增的数据添加到app中的state中的list
                    
                     */}
                        <input type="text" ref={input=>this.msgInput = input}/>
                        <button onClick={this.collectionData.bind(this)}>add item</button>
                    </div>
                )
            }
        }
        class List extends React.Component {
            constructor(props){
                super(props);
                console.log(props);
            }
            render() {
                return (
                    <div>
                        {/* 遍历 */}
                        <ul>{this.props.list.map((item,index)=><li key={index}>{item}</li>)}</ul>
                    </div>
                )
            }
        }
    
      ReactDOM.render(<App/>, document.getElementById("box"));
    </script>
</body>

</html>